開開始學後端的人多少會聽到ASP.NET、.NET Framework、.NET Core,但不清楚他們是什麼,因此這邊簡單說明一下
.NET Framework
如果說C#、VB.NET都是人看得懂的程式語言,那.NET Framework就是在他們下面的大框架,他主要負責3件事情
- Base Class Library (BCL)
負責提供許多的組件讓使用C#跟VB.NET的工程師可以使用微軟提供的內建寫法來完成一些功能,例如System.IO,只要引用了這些組件就可以使用某些微軟提供的Function,讓工程師不需要在自己花很多的時間去寫出很基本的功能。
- 建置/編譯器
當你按下建置時,.NET Framework編譯器會將你寫的程式碼轉換成.dll或是.exe之類的檔案,其中要注意的是不管是哪個版本的.NET Framework都是只能建立在Windows平台上,這也因此後面會有.NET Core的出現。
- Common Language Runtime (CLR)
負責執行編譯出來的exe或dll,特別要注意的是,Runtime是有版本相容的問題的,例如你的IDE建立了一個.NET Framework 4.8的專案,但你建立完後把程式交給客戶,但客戶那邊的電腦只有.NET Framework 3.5,那就會無法執行,這時就是要讓兩邊的版本一致,看是你降級或是對方升級。
.NET Core
因為程式的需求不斷進步,開始會有跨平台(for Linux)的需求,所以微軟又另外發明了.NET Core,對於原本就在用.NET Framework的工程師來說,幾乎可以說是能無痛的切換到.NET Core來開發程式(不是完全無痛,WinForm無法在Linux上執行,所以該痛的還是會痛),對於.NET Core,新手需要知道的有這些:
- 跟.NET Framework一樣有BCL,但少了一些(例如WinForm要用的Windows.Form),因此在開發上如果直接複製原本的程式到.NET Core,還是有些地方需要修改(修改的幅度不一定),但很多方法都是相同的,因此切換上算是輕鬆的。
- 跟.NET Framework一樣有建置/編譯器,但因.NET Core模組拆得更細的關係,因此建置出來的東西會比較小,速度也更快,吃的資源也比較少,更符合微服務的需求。另外在輸出執行檔時,除了原本的runtime跟執行檔分開的模式Framework Dependent Deployment(FDD),多了一種把runtime一起打包成執行檔的模式Self-contained Deployment(SCD)。
- 跟.NET Framework一樣有runtime,但他的runtime已經可以在Linux上跑了,因此可以跨平台。
Xamarin
如果你學了C#,但又想要開發Android或iOS的App,不管是.NET Framework還是.NET Core都無法做到跨這兩個平台,因此誕生了Xamarin的技術。不過Xamarin只能用C#,無法使用VB.NET來開發,所以前一篇才推薦新手在選擇上比較推薦先學習C#,而Xamarin能做的事情也是一樣有以下幾點:
-
提供BCL
雖然一樣是C#的寫法,但跟.NET framework及.NET Core的BCL還是有些不一樣,有多了一些BCL也有少了一些BCL。另外Xamarin.Android跟Xamarin.iOS對應Android跟iOS的SDK都是一對一的,因此在開發上有問題也可以直接找Android的開發資源或是Object-C的開發資源來參考。
-
建置/編譯
可以編譯出Android的APK或iOS的App安裝檔,但筆者當時學的時候要編譯iOS的App時必須在Mac上才能編譯,或是使用VM的技術開一台Mac的虛擬機,然後在VM裡面編譯。
-
根據框架可另外分成:
- Xamarin.Android:
可以用VisualStudio來開發Android的App,VS在安裝開發Xamarin的功能時會順便讓你自由選擇你所需要的Android SDK版本,並藉此來開發。
- Xamarin.iOS:
Xamarin 可讓開發人員使用與 Xcode 中提供的相同 UI 控制項來建立原生 iOS 應用程式 Objective-C ,但新式語言的彈性和簡潔性 (c # ) 、.net 基類庫的強大功能 (BCL) --MSDN
也就是說只要你會寫C#,並且開發過Xamarin.iOS,那你之後要切換成Xcode開發Objective-C也是可以的
- Xamarin.Form:
如果你今天要開發的App同時要跨兩個平台,一般的情況下如果你是無法做到兩個平台的程式碼共用的,而Xamarin.Form就是為了解決這件事情,寫法也算滿簡單的(類似WinForm用拖拉元件的方式開發)。